"use strict";
var hello = "hello ts";
document.querySelectorAll(".app")[0].innerHTML = hello;
/**
 * 1.基础类型
 */
/**
 * 一、布尔、数字、字符串类型
 */
var bool = true;
var num = 10;
var str = "hello da";
/**
 * 二、元组类型
 * 限制长度个数、类型一一对应
 */
var tuple = ["dada", 10, true];
// 像元组中增加数据，只能增加元组中存放的类型
tuple.push("大大大");
/**
 * 三、数组
 * 声明数组中元素数据类型
 */
var arr1 = [1, 2, 3];
var arr2 = ["1", "2", "3"];
var arr3 = [1, "2", 3];
// 泛型方式来声明
var arr4 = [1, "2", 3];
/**
 * 四、枚举类型
 */
var USER_ROLE;
(function (USER_ROLE) {
    USER_ROLE[USER_ROLE["USER"] = 0] = "USER";
    USER_ROLE[USER_ROLE["ADMIN"] = 1] = "ADMIN";
    USER_ROLE[USER_ROLE["MANAGER"] = 2] = "MANAGER";
})(USER_ROLE || (USER_ROLE = {}));
// { 0: "USER", 1: "ADMIN", 2: "MANAGER", USER: 0, ADMIN: 1, MANAGER: 2 }
// 异构枚举
var USER_ROLE2;
(function (USER_ROLE2) {
    USER_ROLE2["USER"] = "user";
    USER_ROLE2[USER_ROLE2["ADMIN"] = 1] = "ADMIN";
    USER_ROLE2[USER_ROLE2["MANAGER"] = 2] = "MANAGER";
})(USER_ROLE2 || (USER_ROLE2 = {}));
/**
 * 五、any类型
 * 不进行类型检测
 */
var arr = ["大大", true, { name: "dada" }];
/**
 * 六、null和 undefined
 * 任何类型的子类型，如果strictNullChecks的值为true，则不能把null和undefined赋给其他类型
 */
// let name: number | boolean;
// name = null
/**
 * 七、void 类型
 * 只能接受null，undefined。一般用于函数的返回值
 */
var a;
a = undefined;
// 严格模式下不能将null赋予给 void
/**
 * 八、never类型
 * 任何类型的子类型，never代表不会出现的值。不能把其他类型赋值给never
 */
function error(message) {
    throw new Error("err");
}
function loop() {
    while (true) { }
}
function fn(x) {
    if (typeof x === "number") {
    }
    else if (typeof x === "string") {
    }
    else {
        console.log(x); // never
    }
}
/**
 * 九、Symbol类型
 * Symbol表示独一无二
 */
var s1 = Symbol("key");
var s2 = Symbol("key");
// console.log(s1 == s2); // false
/**
 * 十、BigInt 类型
 */
var num1 = Number.MAX_SAFE_INTEGER + 1;
var num2 = Number.MAX_SAFE_INTEGER + 2;
// console.log(num1 == num2); // true
var max = BigInt(Number.MAX_SAFE_INTEGER);
// console.log(max + BigInt(1) === max + BigInt(2)); // false
// number 类型和 bigInt 类型是不兼容的
/**
 * 十一、object 对象类型
 * object 表示非原始类型
 */
var create = function (obj) { };
create({});
create([]);
create(function () { });
